#ifndef BACKPACK_USERACTIVITY_H_
#define BACKPACK_USERACTIVITY_H_

#include "UserActivityVariant.hpp"
#include "HotSpot.hpp"
#include "GameContext.hpp"

namespace backpack {


/**
 * UserActivities may be passed by value, they should be light-weight
 */



class TouchActivity {
public:
  TouchActivity(TouchPoint const& point) : m_rTouchPoint(point) {
  }
  void let(ActivityContext &) const;
private:
  std::reference_wrapper<const TouchPoint> m_rTouchPoint;
}; // class TouchActivity
  



class UnlockActivity {
public:
  UnlockActivity(UnlockPoint const& point) : m_rUnlockPoint(point) {
  }
  void let(ActivityContext &) const;
private:
  std::reference_wrapper<const UnlockPoint> m_rUnlockPoint;
}; // class UnlockActivity




class WayPointActivity {
public:
  WayPointActivity(WayPoint const& point) : m_rWayPoint(point) {
  }
  void let(ActivityContext &) const;
private:
  std::reference_wrapper<const WayPoint> m_rWayPoint;
}; // class WayPointActivity




class LambdaActivity {
public:
  LambdaActivity(std::function<void(ActivityContext&)> func)
    : m_function(func) {
  }
  void let(ActivityContext &context) const {
    m_function(context);
  }
private:
  std::function<void(ActivityContext&)> m_function;
}; // class LambdaActivity




struct InventoryActivity {
  void let(ActivityContext &context) const {
    // TODO show inventory
  }
}; // struct InventoryActivity




struct QuitActivity {
  void let(ActivityContext &) const;
}; // struct QuitActivity




} // namespace backpack

#endif // BACKPACK_USERACTIVITY_H_

